package basic7;

import java.util.Scanner;

public class J07_Exception {

	public static void main(String[] args) throws Exception {

		// 예외처리 - 일종의 오류
		// 프로그램에서 발생할 수 있는 오류(error)의 종류
		// 1. 컴파일오류(complie-time error)
		// - 오타등의 잘못된 코드작성이 원인
		// - 개발자가 충분히 수습이 가능하다.
		// 2. 런타임오류(run-time error)
		// - 프로그램 실행시 발생하는 오류
		// - 논리적 오류 (처리가능한 오류)
		// - 잘못된 동작(개발자 처리가능한 오류)이나 특별한 상황(처리 불가한 오류)이 원인

		// 따라서 예외는 프로그램 실행 중 발생하는 오류를 개발자가 처리하기 위해 작성하는 조치사항을 의미
		// 이것을 통해 오류로 인한 프로그램 실행

		// 예외 : checked exeption, unchecked exception

		// 상황1) 두개의 정수를 입력받아 두수를 나눈 결과를 출력하는 프로그램 작성
		// 예외처리 하지 않았을 겨웅

		int num1 = 0, num2 = 0, result = 0;
		Scanner sc = new Scanner(System.in);
		// System.out.println(" 숫자를 두번 입력하세요 : ");
		// num1= sc.nextInt();
		// num2=sc.nextInt();
		// result=num1/num2;
		// System.out.println("두수를 나눈 결과는  :  " + result);

		// num2에 0이 입력되면 num1을 0으로 나눌 수 없으므로 오류 발생하고 프로그램 중단
		// 중단시 결과메세지는 출력이 안됨.
		/*
		 * System.out.println(" 숫자를 두번 입력하세요 : "); num1= sc.nextInt();
		 * num2=sc.nextInt(); 
		 * if (num1==0||num2==0){
		 * System.out.println("0은 입력할 수 없습니다.."); }
		 * else{
		 * 
		 * result=num1/num2; System.out.println("두수를 나눈 결과는  :  " + result); }
		 */
		// 오류가 발생할 조건을 if문으로 막음
		// 오류발생 조건이 많을 경우 다중 if문으로 사용 해야 하는데 그러면 코드가 복잡해짐

		System.out.println(" 숫자를 두번 입력하세요 : ");
		try {
			num1 = sc.nextInt();
			num2 = sc.nextInt();
		} catch (Exception ex) {

			throw new Exception("안녕?틀렸어.다시행~");
			//값 입력시 발생하는 예외를 각각의 catch블럭에서 처리하지 않고 
			//한곳에 모아서 처리하기 위해 throw라는 명령으로 예외를 다른 곳으로 넘김.
		}
		try {
			result = num1 / num2;
			System.out.println("두수를 나눈 결과는  :  " + result);
		} catch (Exception ex) {
			throw new Exception("몰라.이거계산못해-_-다시써다시");
		}
		// 자바에서는 오류발생시 예외 exception처리 매커니즘을 사용함
		// 오류가 발생할 가능성이 있는 코드를 try -catch 블럭으로 지정함
		// chatch에서 오류에 대한 조치사항을 작성
	}

}
